// 扩展 BSGS 算法
// 求解高次同余方程
// 给定整数 a, b, p
// 求满足 a^x ≡ b (mod p) 的最小非负整数 x
// 测试链接 ：https://www.luogu.com.cn/problem/P4195
// 相关帖子 ：https://www.cnblogs.com/dx123/p/16756459.html
// 相关帖子 ：https://oi-wiki.org/math/number-theory/discrete-logarithm/
// 提交以下的code，可以直接通过

#include <bits/stdc++.h>

using namespace std;

#define ll long long

ll gcd(ll a, ll b)
{
    return b == 0 ? a : gcd(b, a % b);
}

ll exbsgs(ll a, ll b, ll p)
{
    a %= p; b %= p;
    if(b == 1 || p == 1) return 0; // x = 0

    ll d, k = 0, A = 1;
    while(true)
    {
        d = gcd(a, p);
        if(d == 1) break; // a 与 p 互质
        if(b % d != 0) return -1; // 方程无解
        ++k; b /= d; p /= d;
        A = A * (a / d) % p; // 求 a^k/D
        if(A == b) return k;
    }

    ll m = ceil(sqrt(p));
    ll t = b;
    unordered_map<int, int> hash; // (b*a^j, j)
    hash[b] = 0;
    for(int j = 1; j < m; ++j)
    {
        t = t * a % p; // 求 b*a^j
        hash[t] = j;
    }
    ll am = 1;
    for(int i = 1; i <= m; ++i) am = am * a % p; // 求 a^m
    t = A;
    for(int i = 1; i <= m; ++i)
    {
        t = t * am % p; // 求 (a^m)^i
        if(hash.count(t)) return i * m - hash[t] + k;
    }
    return -1; // 无解
}

int main()
{
    ll a, p, b;
    while((scanf("%lld%lld%lld", &a, &p, &b) != EOF) && a)
    {
        ll ans = exbsgs(a, b, p);
        if(ans == -1) puts("No Solution");
        else printf("%lld\n", ans);
    }

    return 0;
}